package top.lixunda.commerce.common.core.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import top.lixunda.commerce.common.core.controller.wrapper.BaseDataQuerySqlWrapper;
import top.lixunda.commerce.common.core.controller.wrapper.PageConvertWrapper;

import java.util.List;

/**
 * @author Xumda
 * @version time:2019/12/19 16:00
 */
public interface IConvertEntityController<E, T, D> extends IEntityController<T> {

    /**
     * 查询转换后的订单信息
     *
     * @param id 订单id
     * @return OrderConvertDTO
     */
    @GetMapping(URL_PREFIX + "getConvertById")
    D getConvertById(@RequestParam("id") String id);

    /**
     * 查询转换后的订单信息
     *
     * @param idList 订单id
     * @return OrderConvertDTO
     */
    @PostMapping(URL_PREFIX + "listConvertByIds")
    List<D> listConvertByIds(@RequestBody List<String> idList);

    /**
     * 查询转换后的订单信息
     *
     * @param queryWrapper 查询条件构造器
     * @return OrderConvertDTO
     */
    @PostMapping(URL_PREFIX + "getOneConvert")
    D getOneConvert(@RequestBody BaseDataQuerySqlWrapper<T> queryWrapper);

    /**
     * D
     *
     * @param queryWrapper 条件构造器
     * @return OrderConvertDTO
     */
    @PostMapping(URL_PREFIX + "listConvert")
    List<D> listConvert(@RequestBody BaseDataQuerySqlWrapper<T> queryWrapper);

    /**
     * 查询转换后的订单信息
     *
     * @return OrderConvertDTO
     */
    @GetMapping(URL_PREFIX + "listConvert")
    List<D> listConvert();

    /**
     * 查询转换后的订单信息
     *
     * @param queryWrapper 条件构造器
     * @return OrderConvertDTO
     */
    @PostMapping(URL_PREFIX + "countConvert")
    int countConvert(@RequestBody BaseDataQuerySqlWrapper<E> queryWrapper);

    /**
     * 查询转换后的订单信息
     *
     * @return OrderConvertDTO
     */
    @GetMapping(URL_PREFIX + "countConvert")
    int countConvert();

    /**
     * 查询转换后的订单信息
     *
     * @param pageWrapper 包含条件构造器和分页数据
     * @return OrderConvertDTO
     */
    @PostMapping(URL_PREFIX + "pageConvertWrapper")
    Page<D> pageConvert(@RequestBody PageConvertWrapper<E, T, D> pageWrapper);

    /**
     * 查询转换后的订单信息
     *
     * @param page 分页数据
     * @return OrderConvertDTO
     */
    @PostMapping(URL_PREFIX + "pageConvert")
    Page<D> pageConvert(@RequestBody Page<D> page);

}
